package com.springboot.java.design.sort;

/**
 *  选择排序
 *
 *      从未排序的区间找到最小的元素 放到数组头最为已排序区间
 *      再从未排序的区间找到最小的元素 放到已排序区间尾部
 *      重复上面过程
 *
 */
public class SelectSort {

    public static void main(String[] args) {
        int[] arr = new int[]{3,4,6,1,8,2,0};
        selectSort(arr);
        printArr(arr);
    }

    public static void selectSort(int[] a){

        // 已排序区间的索引
        int j = 0;

        for (int i = 0; i < a.length; i++) {
           int min =  minIndex(a, i);

           if(min != i){
               int temp = a[j];
               a[j] = a[min];
               a[min] = temp;
           }
           j++;
        }


    }

    /**
     *  在未排序区间找出最小元素的索引
     * @param a
     * @param offset
     * @return
     */
    public static int minIndex(int[] a, int offset){

        int min = offset;

        for (int i = offset + 1; i < a.length; i++) {
            if(a[min] > a[i]){
                min = i;
            }
        }

        return min;
    }

    public static void printArr(int[] a){
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
        System.out.println();
    }

}
